/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import beans.auxiliares.Oferta;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import modelo.beans.OfertasBean;
import modelo.beans.ProveedorBean;
import org.apache.commons.beanutils.PropertyUtils;
import java.sql.Types.*;
import javax.servlet.http.HttpServletRequest;

/**
 *
 * @author RICARDO
 */
public class GestionProveedor {
     DatosConexion dt;
     String name;
     ResultSet rs=null;
     Statement st=null;
     
     public GestionProveedor(){
         dt=new DatosConexion();
         this.st=this.dt.cogerStatement();
     }

    /*
     * Metodo para insertar un nuevo proveedor
     */
       public String insertarProveedor (ProveedorBean pb) {
       
        String estado="existeproveedoor";
        int insert=0;
        String nombre = pb.getNombre();
        String contrasena=pb.getContrasena();
        String email=pb.getEmail();
        String tipo=pb.getTipo_oferta();
        try{
           if(existebd(nombre)==false){
           insert=st.executeUpdate("INSERT INTO proveedores (nombre,email,estado,tipo_oferta,contrasena) VALUES('"+nombre+"','"+email+"','false','"+tipo+"','"+contrasena+"')"); 
           }
        }
        catch (SQLException e){
            System.out.println("Error: inserntando proveedor");
        }
        if(insert==1){
            estado="proveedor";
        }
        return estado;
    }
    /*
     * metodo para validar un proveedor
     * devuelve "proveedor" o "no"
     */
        public String validar (String nombre,String contrasena) {
       
        String estado="no";
        String idproveedor;
       // String nombre = pb.getNombre();
        //String contrasena=pb.getContrasena();
        int insert;
        //ResultSet rs;
        try{
            System.out.println("antes de select: al selecionar validar");
            System.out.println("Nombre:"+nombre);
        
            String sql="SELECT * FROM proveedores WHERE nombre='"+nombre+"'" + "AND contrasena='"+contrasena+"'";
            // rs=st.executeQuery("SELECT idproveedor,tipo_oferta FROM proveedores WHERE nombre='"+nombre+"'");
            rs=st.executeQuery(sql);
          System.out.println("despues de select: al selecionar validar");
          if (rs.next()){
               System.out.println("=========Provvedor validado=======");
               estado =rs.getString("estado");
               idproveedor=rs.getString("idproveedor");
               String pb;
              // pb.setIdproveedor(idproveedor);
               System.out.println("Tipo Oferta: "+estado);
               System.out.println("idproveedor: "+idproveedor);
               estado="proveedor";
           }
           else{
              estado ="no";
           }
        }   
        catch (SQLException e){ 
            System.out.println("Error: al selecionar validar");
            System.err.println("Warning: error on insert data: " + e.getMessage());   
            e.printStackTrace();
        }
        return estado;
    
    }
        public int getIdproveedor(String nombre){
            int idproveedor=-1;
                       
            try{
                String sql="SELECT idproveedor FROM proveedores WHERE nombre='"+nombre+"'";
                rs=st.executeQuery(sql);
                rs.next();
                idproveedor=rs.getInt("idproveedor");
            }
            catch(SQLException e){
                    e.printStackTrace();
            }
            return idproveedor;
        }
        
public String insertarOferta(Oferta pb,int idproveedor){
    String estado="ofertanoinsertada";
    Oferta oferta=new Oferta();
    oferta=pb;
    Date date=new Date(30000);
    int id;
    int plazas=5;
    int precio=20;
    int insert=0;
    
    id=idproveedor;
        //Oferta oferta=new Oferta();
        //oferta=pba;
        java.sql.Date fechainicio=oferta.getFecha_inicio();
        System.out.println("Fecha inicio: "+fechainicio+"Fecha fina: "+oferta.getFecha_final());
        //comprobamos datos oferta
        if((oferta.getFecha_final().after(oferta.getFecha_inicio()))||(oferta.getFecha_final().equals(oferta.getFecha_inicio()))){
               try{
                   //obtenemos tipo de proveedor
                   rs=st.executeQuery("SELECT tipo_oferta FROM proveedores WHERE idproveedor='"+idproveedor+"'");
                   rs.next();
                   String tipo;
                   tipo=rs.getString("tipo_oferta");
                   //insertamos oferta nueva
                   insert=st.executeUpdate("INSERT INTO ofertas (idproveedor,tipooferta,subtipooferta,descripcion,municipio,fechainicio,fechafin,plazas,precio)VALUES('"+id+"','"+tipo+"','restaurante','"+oferta.getDescripcion()+"','"+oferta.getMunicipio()+"','"+oferta.getFecha_inicio()+"','"+oferta.getFecha_final()+"','"+ oferta.getPlazas_disponibles()+"','"+oferta.getPrecio()+"')");   
                 }
                 catch (SQLException e){
                        System.err.println("Warning: error on insert data: " + e.getMessage());   
                        e.printStackTrace();
                 }
       }
        if(insert==1){
            estado="ofertainsertada";
        }
    return estado;
}
        
public OfertasBean listarOfertas(ProveedorBean pb){
      
    String estado="error";
    OfertasBean listaoferta=new OfertasBean();

    int insert=0;
        String nombre = pb.getNombre();
        String contrasena=pb.getContrasena();
        int id=pb.getIdproveedor();
        System.out.println("ProveedorBean dentro modelo: "+pb.getNombre()+pb.getContrasena());
        System.out.println("Id: "+id+"Nombre: "+nombre+"contrasena: "+contrasena);
        try{
           rs=st.executeQuery("SELECT * FROM ofertas WHERE idproveedor='"+id+"'order by idoferta desc");
           estado="success";
        }
        catch (SQLException e){
            System.err.println("Warning: error on insert data: " + e.getMessage());   
            e.printStackTrace();
        }
         try {
             ArrayList<Oferta> lista=new ArrayList<Oferta>();
             while (rs.next()){
                 Oferta oferta=new Oferta();
                 oferta.getIdproveedor();
                 oferta.setIdoferta(rs.getInt("idoferta"));
                 oferta.setIdproveedor(rs.getInt("idproveedor"));
                 oferta.setTipooferta(rs.getString("tipooferta"));
                 oferta.setSub_tipooferta(rs.getString("subtipooferta"));
                 oferta.setDescripcion(rs.getString("descripcion"));
                 oferta.setMunicipio(rs.getString("municipio"));
                 //oferta.setNoferta(rs.getString("noferta"));
                 oferta.setFecha_final(rs.getDate("fechafin"));
                 oferta.setFecha_inicio(rs.getDate("fechainicio"));
                 oferta.setPlazas_disponibles(String.valueOf(rs.getInt("plazas")));
                 oferta.setPrecio((rs.getInt("precio")));
                 //System.out.println(oferta.getSub_tipooferta());
                 //System.out.println(oferta.getDescripcion());
                 //System.out.println(oferta.getMunicipio());
                 //lista.set(0, oferta);
                 lista.add(oferta);  
             }
             listaoferta.setOfertas(lista);
         } catch (SQLException ex) {
             Logger.getLogger(GestionProveedor.class.getName()).log(Level.SEVERE, null, ex);
         }
        
         
    return listaoferta;
}
public void modificarOferta(int idoferta,Oferta oferta){
    int insert=0;
    try{
           System.out.println("voy a modificar ofertas: "+idoferta+"Descripcion: "+oferta.getDescripcion()+" Municipio:"+oferta.getMunicipio());
           insert=st.executeUpdate("UPDATE ofertas SET descripcion='"+oferta.getDescripcion()+"',fechainicio='"+oferta.getFecha_inicio()+"',fechafin='"+oferta.getFecha_final()+"',municipio='"+oferta.getMunicipio()+"',plazas='"+oferta.getPlazas_disponibles()+"',precio='"+oferta.getPrecio()+"' WHERE idoferta='"+idoferta+"'");
           System.out.println("MODIFICADA  oferta: "+idoferta);
           System.out.println("Fecha: "); 
        }
        catch (SQLException e){
           System.err.println("Warning: error on imodificando data: " + e.getMessage());   
            e.printStackTrace();
        }
    
}
private boolean existebd(String nombre){
    boolean existe=false;
    String a;
    System.out.println("Existe usuario: "+nombre);
         try {
            // rs=st.executeQuery("SELECT nombre FROM proveedores WHERE EXISTS (SELECT nombre FROM proveedores WHERE nombre='"+nombre+"')");
             rs=st.executeQuery("SELECT nombre FROM proveedores WHERE nombre='"+nombre+"'");
             rs.next();
             a=rs.getString("nombre");
             if(a.equals(nombre)){
                 existe=true;
             }
         } catch (SQLException ex) {
             System.out.println("HHHHHHHHHHHHHHHHHHHHHHH");
            // Logger.getLogger(GestionProveedor.class.getName()).log(Level.SEVERE, null, ex);
         }
System.out.println("Comprobamos si existe: "+ existe);
    return existe;
}
public String loginOff(){
    String estado;
    estado="loginoff";
    ProveedorBean pb=new ProveedorBean();
                
    return estado;
}

public Oferta getOferta(int idoferta){
    Oferta oferta=new Oferta();
    try {
             rs=st.executeQuery("SELECT * FROM ofertas WHERE idoferta='"+idoferta+"'");
             rs.next();
             oferta.setIdoferta(rs.getInt("idoferta"));
             oferta.setIdproveedor((rs.getInt("idproveedor")));
             oferta.setTipooferta(rs.getString("tipooferta"));
             oferta.setSub_tipooferta(rs.getString("subtipooferta"));
             oferta.setDescripcion(rs.getString("descripcion"));
             oferta.setMunicipio(rs.getString("municipio"));
             oferta.setFecha_inicio(rs.getDate("fechainicio"));
             oferta.setFecha_final(rs.getDate("fechafin"));
             oferta.setPlazas_disponibles(String.valueOf(rs.getInt("plazas")));
             oferta.setPrecio((rs.getInt("precio")));             
         } catch (SQLException ex) {
             Logger.getLogger(GestionProveedor.class.getName()).log(Level.SEVERE, null, ex);
         }
    return oferta;
}
}